// src/utils/storage.js
import Cookies from 'js-cookie';

// 封装 Cookie 操作（统一管理，后续修改只需改这里）
export const Cookie = {
  // 读取指定 Cookie
  get: (name) => Cookies.get(name),

  // 读取所有 Cookie
  getAll: () => Cookies.get(),

  // 设置 Cookie（支持过期时间、路径等配置）
  set: (name, value, options = {}) => {
    // 默认配置：7天过期，全路径可用
    const defaultOptions = {
      expires: 7,
      path: '/'
    };
    Cookies.set(name, value, { ...defaultOptions, ...options });
  },

  // 删除 Cookie
  remove: (name, options = { path: '/' }) => {
    Cookies.remove(name, options);
  },

  // 专门读取 token（常用操作单独封装，简化使用）
  getToken: () => Cookies.get('token'),

  // 专门设置 token
  setToken: (token, expires = 7) => {
    Cookies.set('token', token, { expires, path: '/' });
  },

  // 清除 token
  removeToken: () => {
    Cookies.remove('token', { path: '/' });
  },

  // ========== 新增：koa:sess 相关操作 ==========
  // 读取并解析 koa:sess（Koa 的 Session Cookie）
  // 返回：解析后的对象（如 { userId: 123 }）或 null（未找到/解析失败）
  getKoaSess: () => {
    try {
      // 1. 获取名为 "koa:sess" 的 Cookie 值（原始是 JSON 字符串）
      const koaSessStr = Cookies.get('koa:sess');
      if (!koaSessStr) {
        console.log('未找到 koa:sess Cookie');
        return null;
      }

      // 2. 解析 JSON 字符串（Koa 会把 Session 数据序列化为 JSON 存储）
      const koaSess = JSON.parse(koaSessStr);
      return koaSess;
    } catch (error) {
      // 处理解析失败（如 Cookie 加密、格式错误）
      console.error('解析 koa:sess 失败：', error.message);
      return null;
    }
  },

  // 读取 koa:sess 中的某个具体字段（如 userId、userNickname）
  // 参数：fieldName - 要获取的字段名（如 'userId'）
  // 返回：字段值或 null（未找到字段/解析失败）
  getKoaSessField: (fieldName) => {
    const koaSess = Cookie.getKoaSess();
    if (!koaSess) return null;
    // 返回指定字段，没有则返回 null
    return koaSess[fieldName] ?? null;
  }
};

// 也可以封装 localStorage（可选，后续可能用到）
export const LocalStorage = {
  get: (name) => localStorage.getItem(name),
  set: (name, value) => localStorage.setItem(name, JSON.stringify(value)),
  remove: (name) => localStorage.removeItem(name),
  clear: () => localStorage.clear()
};